﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using J_FoundationClasses.Teste;
using J_FoundationClasses.Operacao;
using XYSC_1;

namespace J_Controle
{
    public class DialogoTeste : ControladorDialogo
    {
        List<Teste>[] ListasTestes = new List<Teste>[3];
        ListBox[] ListBoxes = new ListBox[3];
        IProcessador ProcAtual = new XYSC1_V2();  // ########### falta configurar

        Teste TesteAtual;

        public DialogoTeste(Panel prmPnl)
            : base(prmPnl)
        {
            // Identificar meus ListBoxes
            ListBoxes[0] = PainelAtual.Controls["lstAplicativo"] as ListBox;
            ListBoxes[1] = PainelAtual.Controls["lstCirMon"] as ListBox;
            ListBoxes[2] = PainelAtual.Controls["lstProc"] as ListBox;

            // ======================================================
            // instanciar e inicialisar os listes de testes
            // 1.: Testes do aplicativo
            List<Teste> ll = new List<Teste>();
            ll.Add(new TesteFalse1000("Test1"));
            ll.Add(new TesteFalse1000("Test2"));
            ListasTestes[0] = ll;

            // ======================================================
            // instanciar e inicialisar os listes de testes
            // 3.: Testes do processador

            bool ClasseTesteProcEncontrado = false;
            foreach (EspecTeste et in ProcAtual.TestesEspecificos)
            {
                if (et is EspecTesteInter)
                {
                    ListasTestes[2].Add(new TesteInteracoes(et as EspecTesteInter));
                    ClasseTesteProcEncontrado = true;
                }

                if (!ClasseTesteProcEncontrado)
                {
                    // tipo do objeto especificação desconhecido
                    MessageBox.Show(String.Format(
                    "Classe {0} utilizado pelo {1} é desconhecido dentro do DialogoTeste.",
                    et.ClasseTeste, ProcAtual.ToString()));
                }
            }

            // encher o conteúdo dos ListBoxes
            // ###################### for 0..3
            foreach (Teste tt in ListasTestes[0]) ListBoxes[0].Items.Add(tt.Nome);
        }

        public void Selecionar(object Sender)
        {
            // reagir à seleção de um item em um ListBox
            int idx = -1;
            ListBox ls = (ListBox)Sender;
            if (ls.SelectedIndex < 0) return; // não reagir ao deselect

            // identificar listbox responsavel. Deselectar todo em os outros
            for(int ii = 0; ii < 3; ii++)
            {
                if (ls.Equals(ListBoxes[ii]))idx = ii; 
                else ListBoxes[ii].ClearSelected();
            }

            // identificar teste selecionado
            List<Teste> LstTst = ListasTestes[idx];
            foreach (Teste tt in LstTst) 
                if (tt.Nome == ls.SelectedItem.ToString()) TesteAtual = tt;

            // mostrar no painel
            (PainelAtual.Controls["txtNome"] as TextBox).Text = TesteAtual.Nome;
            (PainelAtual.Controls["txtDescricao"] as TextBox).Text = TesteAtual.Descricao;

        }

    }
}
